const formatMsg = require('./fmtwxmsg');

function help() {
    return `这是一个消息回复测试程序，会把消息原样返回，但是目前不支持视频类型的消息`;
}

function aboutus () {
    return `我是一个程序员，每天写代码有点苦、有点累，可是还停不下来···`;
}

function userMsg(wxmsg, retmsg) {
    /*
        检测是否为文本消息，如果是文本消息则先要检测是不是支持的关键词回复。
    */
    if (wxmsg.MsgType == 'text') {
        switch(wxmsg.Content) {
            case 'help':
            case '帮助':
            case '?':
            case '？':
                retmsg.msg = help();
                retmsg.msgtype = 'text';
                return formatMsg(retmsg);

            case 'hello':
            case '你好':
                retmsg.msg = '你好，你可以输入一些关键字测试消息回复，输入help/?获取帮助';
                retmsg.msgtype = 'text';
                return formatMsg(retmsg);

        }
        retmsg.msg = wxmsg.Content;
        retmsg.msgtype = wxmsg.MsgType;
        return formatMsg(retmsg);

    } else {
        switch(wxmsg.MsgType) {
            case 'image':
            case 'voice':
            case 'video':
                retmsg.msg = wxmsg.MediaId;
                retmsg.msgtype = wxmsg.MsgType;
                break;
            default:
                retmsg.msg = '不支持的类型';
        }

        return formatMsg(retmsg);
    }
}

//处理菜单的CLICK事件
function clickHandle (wxmsg, retmsg) {
    switch (wxmsg.EventKey) {
      case 'help':
        retmsg.msgtype = 'text';
        retmsg.msg = help();
        return formatMsg(retmsg);
        
      case 'aboutus':
        retmsg.msgtype = 'text';
        retmsg.msg = aboutus();
        return formatMsg(retmsg);
    }
    return '';
}

function eventMsg(wxmsg, retmsg) {

    //默认让返回消息类型为文本
    retmsg.msgtype = 'text';

    switch (wxmsg.Event) {
        case 'subscribe':
            retmsg.msg = '感谢关注本公众号，这里有技术类内容、商品展示和销售、更多内容可以通过公众号菜单获取。';
            return formatMsg(retmsg);

        case 'unsubscribe':
            console.log(wxmsg.FromUserName, '取消关注');
            break;

        case 'VIEW':
            console.log(wxmsg.FromUserName, '点击', wxmsg.EventKey);
            break;

        case 'CLICK':
            return clickHandle(wxmsg, retmsg);
        default:
            return '';
    }

    return '';
}

//根据消息类型进行派发
exports.msgDispatch = function msgDispatch(wxmsg, retmsg) {
    if (wxmsg.MsgType == 'event') {
        return eventMsg(wxmsg, retmsg);
    }
    return userMsg(wxmsg, retmsg);
};
